# 导入Django的.shortcuts模块中的render和get_object_or_404函数
from django.shortcuts import render, get_object_or_404
# 从当前应用的models模块导入Category和Product模型
from .models import Category, Product
# 从cart应用的forms模块导入CartAddProductForm表单
from cart.forms import CartAddProductForm


# 定义一个视图函数product_list，用于显示产品列表
def product_list(request, category_slug=None):
    # 初始化category变量为None
    category = None
    # 获取所有Category对象
    categories = Category.objects.all()
    # 获取所有available为True的Product对象
    products = Product.objects.filter(available=True)
    # 如果提供了category_slug参数
    if category_slug:
        # 尝试获取对应的Category对象，如果不存在则返回404错误
        category = get_object_or_404(Category, slug=category_slug)
        # 过滤出属于该Category的产品
        products = products.filter(category=category)
    # 渲染product_list模板，并传递category、categories和products作为上下文
    return render(request, 'shop/product/list.html', {'category': category,
                                                      'categories': categories,
                                                      'products': products})


# 定义一个视图函数product_detail，用于显示单个产品的详细信息
def product_detail(request, id, slug):
    # 尝试获取id和slug匹配且available为True的Product对象，如果不存在则返回404错误
    product = get_object_or_404(Product, id=id, slug=slug, available=True)
    # 创建一个CartAddProductForm表单实例
    cart_product_form = CartAddProductForm()
    # 渲染product_detail模板，并传递product、cart_product_form和stock作为上下文
    return render(request,
                  'shop/product/detail.html',
                  {'product': product,
                   'cart_product_form': cart_product_form,
                   'stock':product.stock  # 传递产品的库存信息
                   })
